home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
EnigmA Amiga Run 1995 October
/
EnigmA AMIGA RUN 01 (1995)(G.R. Edizioni)(IT)[!][issue 1995-10][Aminet 7].iso
/
Enigma Amiga CD
/
Listati
/
method.rpl
< prev
Wrap
Text File
|
1994-12-02
|
3KB
|
107 lines
( Nuove words RPL per Real 3D:
( definizione del nuovo metodo di animazione
( "SET_VELOCITY"
(
( by Alessandro Tasora, 1994
"r3d2:rpl/sys/vectors.rpl" LOAD
"r3d2:rpl/sys/objects.rpl" LOAD
"r3d2:rpl/sys/tags.rpl" LOAD
: GetTargets
0 ( 0 termina la lista
o2 @ O_GETSUB ( variabile o2 punta il 1 sub obj
BEGIN
DUP IF ( test, not 0: c'e l'oggetto
DUP O.wMETHOD + W@ ( fetch wMETHOD field
NOT IF ( se zero, target valido
DUP
ENDIF
ELSE ( object address = zero,
DROP
EXIT
ENDIF
O_GETNEXT ( fetch address del prossimo obj
AGAIN
;
: GetParameters
0 ( 0 termina la lista
o1 @ O_GETSUB ( variabile o1 punta 1 sub obj
BEGIN
DUP IF ( test, not 0: c'è l'oggetto
DUP O.wMETHOD + W@ ( fetch wMETHOD field
NOT IF ( se zero, target valido
DUP
ENDIF
ELSE ( object address = zero,
DROP
EXIT
ENDIF
O_GETNEXT ( fetch addr. object successivo
AGAIN
;
( Per cercare la distanza fra due punti a caso
( di due superf. o due "evaluable prim."; se si
( usano due "offset" la distanza è fissa.
: GetRndDist ( aObj1, aObj2, 0; -> Vdistanza )
DUP NOT IF
"parametro mancante" ERROR
ENDIF
RANDOM RANDOM RANDOM O_EVAL mycog1 V!
DUP NOT IF
"parametro2 mancante" ERROR
ENDIF
RANDOM RANDOM RANDOM O_EVAL mycog2 V!
DROP
mycog1 V@ mycog2 V@ VSUB
;
( Set_VVEL_tag inserisce il valore vettoriale
( di velocità nel tag VVEL dell' oggetto
VVARIABLE velocità
: Set_VVEL_tag ( aObject, Vvelocity )
velocità V!
DUP
"VVEL" O_FINDTAG DUP
IF
T.aVAL + @
velocità V@
4 ROLL V! ( inserisce il valore corretto
ELSE
DROP
"CEND" velocità V@ "VVEL" O_CREATAG DROP
ENDIF
;
( SET_VELOCITY
( Metodo che assegna una data velocità
( ai targets. La vel. è definita da 2
( offset, o due eval. prim. By A. Tasora 94
VVARIABLE tmpdist
: OP_SET_VELOCITY
GetParameters ( fetch 2 offset objects
GetRndDist ( find distance between them
tmpdist V! ( store distance in a variable
( now stack is empty.
GetTargets
BEGIN ( loop through all targets
DUP
WHILE
tmpdist V@ ( fetch distance
Set_VVEL_tag ( add the tag, given the aObj
( and the Vvelocity.
DROP
REPEAT
DROP
1 ( return 1, everything is okay
;
& OP_SET_VELOCITY "SET_VELOCITY" MTH_CREATE DROP